package com.zhe.zheblogmaster.service;

import com.github.pagehelper.PageInfo;
import com.zhe.zheblogmaster.entity.Blog;
import com.zhe.zheblogmaster.entity.vo.BlogDetailVO;
import com.zhe.zheblogmaster.entity.vo.BlogVO;
import com.zhe.zheblogmaster.entity.vo.SimpleBlogVO;

import java.util.List;
import java.util.Map;

/**
 * @author WHAOU
 */
public interface BlogService {

    /**
     * 获取所有已发布的博客的简略信息
     *
     * @param pageNum 当前页码
     * @return 当前页博客列表信息
     */
    PageInfo<BlogVO> getBlogVOList(int pageNum);


    /**
     * 获取最新发布的博客
     *
     * @param limit 项目数
     * @return 返回最新的limit条记录
     */
    List<SimpleBlogVO> getLatestBlogRecords(int limit);

    /**
     * 获取点击最多的 limit 条博客
     *
     * @param limit 项目数量
     * @return 返回点击最多的 limit 条博客
     */
    List<SimpleBlogVO> getHotBlogs(int limit);

    /**
     * 根据关键字查询博客信息
     *
     * @param keyword 关键字
     * @param pageNum 当前页
     * @return 当前页的博客信息
     */
    PageInfo<SimpleBlogVO> getBlogVOListByKeyword(String keyword, Integer pageNum);

    /**
     * 根据博客分类名称获取该分类下当前页的博客信息
     *
     * @param categoryName 博客分类名称
     * @param pageNum      当前页
     * @return 查询结果
     */
    PageInfo<SimpleBlogVO> getSimpleBlogVOByCategoryName(String categoryName, Integer pageNum);

    /**
     * 获取关于页的填充信息
     *
     * @return 返回关于页的填充信息
     */
    BlogDetailVO getAboutBlog();

    /**
     * 根据博客id获取博客信息
     *
     * @param blogId 博客id
     * @return 博客信息，博客内容已由markdown转为html
     */
    BlogDetailVO getBlogDetailVOById(Long blogId);

    /**
     * 获取博客数量
     *
     * @return 返回博客数量
     */
    Integer getTotalBlogs();

    /**
     * 保存博客
     *
     * @param blog 博客信息
     * @return 保存成功则返回true，否则返回false
     */
    Boolean saveBlog(Blog blog);

    /**
     * 根据Map中的条件查询博客
     * <p>
     * 可封装选项如下：
     * keyword 关键字
     * blogStatus 博客状态 0-草稿 1-发布
     * blogCategoryId 博客分类id
     *
     * @param pageNum   当前页
     * @param condition 封装在 Map<String,Object> 中的查询条件
     * @return 查询到的博客列表
     */
    PageInfo<Blog> getBlogsByMap(int pageNum, Map<String, Object> condition);

    /**
     * 根据博客id查询博客信息
     *
     * @param blogId 博客id
     * @return 若存在该博客则返回，否则返回null
     */
    Blog getBlogById(Long blogId);

    /**
     * 根据博客id批量删除博客记录
     *
     * @param ids 博客id
     * @return 返回删除博客记录数目
     */
    int removeBlogsByIds(Long[] ids);


    /**
     * 修改博客
     *
     * @param blog 博客信息
     * @return 若修改成功则返回 BlogConstants.FEEDBACK_SUCCESS ，否则返回反馈信息
     */
    String updateBlog(Blog blog);
}
